# -*- coding: utf-8 -*-
#===============================================================================
# Koro Business Environment
# Copyright (C) 2008  Antonio Corroppoli
#
#This file is part of Koro BE.
# 
# Koro BE is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# 
# Koro BE is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with Koro BE; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
#===============================================================================
'''
Created on 17/dic/2010

@author: antstud
'''

import wx
#import wx.lib.flatnotebook as fnb

from koro import util
from koro.ui.wxgui.widgets import controls as co
from koro.ui.wxgui.mellcfg import mDefaultBorder
from koro.ui.wxgui.widgets import dialogs
from koro.ui.wxgui import pages
#import koro.ui.wxgui.gActionPanels as gActionPanels


def get_opzioni_page():
    if util.is_admin():
        return OpzioniAdminPage
    return OpzioniPage

#===============================================================================
# GeneralePanel
#===============================================================================
class ModuliPanel(wx.Panel):
    NAME='Moduli'
    def __init__(self,parent,modules,*args,**kwargs):
        wx.Panel.__init__(self,parent,*args,**kwargs)        
        self.__do_layout(modules)                      
           
    def __do_layout(self,modules):
        mainsizer=wx.BoxSizer(wx.HORIZONTAL)
        #fieldsizer = wx.GridBagSizer(0,0)
        
        boxsizer=wx.BoxSizer(wx.VERTICAL)        
        
        boxsizer.AddSpacer(10)
        titolo=wx.StaticText(self,label="Riavviare il programma per rendere attive le modifiche.")
        font=titolo.GetFont()
        font.SetWeight(wx.FONTWEIGHT_BOLD)
        titolo.SetFont(font)
        boxsizer.Add(titolo,0,wx.ALL|wx.EXPAND,border=mDefaultBorder)
        boxsizer.AddSpacer(5)
        
#        self.list=TestListCtrl(self,wx.NewId(),style=wx.LC_REPORT
#                                 | wx.BORDER_NONE
#                                 | wx.LC_SORT_ASCENDING)#
        self.list=co.CheckListCtrl(self)
        self.list.InsertColumn(0, "Modulo")
        self.list.InsertColumn(1, "Versione")
        self.list.InsertColumn(2, "Dipendenze")
        self.list.InsertColumn(3, "Descrizione")
        self.list.InsertColumn(4, "Peso")
        import sys
        for mod in modules.all():
            index = self.list.InsertStringItem(sys.maxint, mod.name)
            self.list.SetStringItem(index, 1, mod.get_version())
            self.list.SetStringItem(index, 2, mod.get_dependency())
            self.list.SetStringItem(index, 3, mod.get_description())
            self.list.SetStringItem(index, 4, str(mod.get_weight()))
            #self.SetItemData(index, key)
#            self.list.Append((mod.name,
#                              mod.get_version(),
#                              mod.get_dependency(),
#                              mod.get_description(),
#                              mod.get_weight(),
#                              ))
            self.list.CheckItem(self.list.GetItemCount()-1, mod.enabled)
            #self.list.Seti.SetItemData(self.list.GetItemCount(),mod.name)
#        import sys
#        for mod in modules.all():
#            index = self.list.InsertStringItem(sys.maxint, mod.name)
#            self.list.SetStringItem(index, 1, mod.get_dependency())
#            self.list.SetStringItem(index, 2, mod.description)
#            self.list.SetItemData(index, mod.name)
      
        self.list.SetColumnWidth(0, wx.LIST_AUTOSIZE)
        self.list.SetColumnWidth(1, 70)
        self.list.SetColumnWidth(2, wx.LIST_AUTOSIZE)
        self.list.SetColumnWidth(3, wx.LIST_AUTOSIZE)
        self.list.SetColumnWidth(4, 100)
        
        boxsizer.Add(self.list,1,wx.TOP|wx.RIGHT|wx.EXPAND,border=mDefaultBorder)
        

        boxsizer.AddSpacer(20)
                
        mainsizer.Add(boxsizer,1,flag=wx.ALL|wx.EXPAND ,border=10)#riga zero colonna 1        
        
        mainsizer.Layout()
        self.SetAutoLayout(True) 
        self.SetSizer(mainsizer) 
    
#    def __bind(self):
#        self.Bind(wx.EVT_CHECKBOX, self.on_check_calc,id=self.calc.Id)
    
    def update_fields(self,opzioni):
        print 'Moduli.update_fields'

    
    def reset_fields(self):#non serve
        print 'Moduli.reset_fields'
        
    
    def update_object(self,modules):
        print 'Moduli.update_object'
    
    def get_selected_modules(self):
        return self.list.get_checked()
    

##===============================================================================
## GeneralePanel
##===============================================================================
#class GeneralePanel(wx.Panel):
#    def __init__(self,*args,**kwargs):
#        wx.Panel.__init__(self,*args,**kwargs)
#        self.__do_layout()
#        self.__bind()              
#           
#    def __do_layout(self):
#        mainsizer=wx.BoxSizer(wx.HORIZONTAL)
#        #fieldsizer = wx.GridBagSizer(0,0)
#        
#        boxsizer=wx.BoxSizer(wx.VERTICAL)        
#        
#        boxsizer.AddSpacer(10)
#        titolo=wx.StaticText(self,label="Abilita i seguenti moduli")
#        font=titolo.GetFont()
#        font.SetWeight(wx.FONTWEIGHT_BOLD)
#        titolo.SetFont(font)
#        boxsizer.Add(titolo,0,wx.ALL,border=mDefaultBorder)
#        boxsizer.AddSpacer(5)
#                
#        self.gestione_magazzino = wx.CheckBox(parent=self,id=wx.NewId(),label="Gestione magazzino",style=wx.ALIGN_RIGHT)
#        boxsizer.Add(self.gestione_magazzino,0,wx.TOP|wx.RIGHT,border=mDefaultBorder)
#        
#        self.vendite_banco = wx.CheckBox(parent=self,id=wx.NewId(),label="Vendite al banco",style=wx.ALIGN_RIGHT)
#        boxsizer.Add(self.vendite_banco,0,wx.TOP|wx.RIGHT,border=mDefaultBorder)
#                
#        boxsizer.AddSpacer(20)
#        #liste codici listini
#        listini=self._request_listini()
#        choices_f=[]
#        choices_c=[]
#        for listino_ in listini:
#            if not listino_.has_flag_ricarico():
#                choices_f.append(listino_.codice)
#            choices_c.append(listino_.codice)
#        ##lista codici iva
#        choices_iva=[]    
#        codiva=self._request_codici_iva()
#        for cod in codiva:
#            choices_iva.append(cod.codice)
#                 
#        titolo=wx.StaticText(self,label="Listini")
#        font=titolo.GetFont()
#        font.SetWeight(wx.FONTWEIGHT_BOLD)
#        titolo.SetFont(font)
#        boxsizer.Add(titolo,0,wx.ALL,border=mDefaultBorder)
#        boxsizer.AddSpacer(5)
#        self.vis_prezzo_forn = wx.CheckBox(parent=self,id=wx.NewId(),label="Visualizza prezzo fornitore nelle vendite ",style=wx.ALIGN_RIGHT)
#        boxsizer.Add(self.vis_prezzo_forn,0,wx.TOP|wx.RIGHT,border=mDefaultBorder)
#        
#        self.prezzi_ivati = wx.CheckBox(parent=self,id=wx.NewId(),label="Lavora con prezzi ivati ",style=wx.ALIGN_RIGHT)
#        boxsizer.Add(self.prezzi_ivati,0,wx.TOP|wx.RIGHT,border=mDefaultBorder)
#        self.prezzi_ivati.Enable(False)
#        
#        self.default_listforn_ctrl = co.Choice(parent=self,size=(197, 25),choices=choices_f)
#        self.default_listforn=co.LabeledCtrl(self,control=self.default_listforn_ctrl,label='Listino fornitore (default) ',label_size=(-1,-1))
#        boxsizer.Add(self.default_listforn,0,wx.ALL,border=mDefaultBorder)
#        
#        self.default_listcli_ctrl = co.Choice(parent=self,size=(197, 25),choices=choices_c)
#        self.default_listcli=co.LabeledCtrl(self,control=self.default_listcli_ctrl,label='Listino cliente (default) ',label_size=(-1,-1))
#        boxsizer.Add(self.default_listcli,0,wx.ALL,border=mDefaultBorder)
#        
#        self.default_iva_ctrl = co.Choice(parent=self,size=(197, 25),choices=choices_iva)
#        self.default_iva=co.LabeledCtrl(self,control=self.default_iva_ctrl,label='Iva (default) ',label_size=(-1,-1))
#        boxsizer.Add(self.default_iva,0,wx.ALL,border=mDefaultBorder)
#        
#        boxsizer.AddSpacer(20)
#        
#        titolo=wx.StaticText(self,label="Arrotondamenti")
#        font=titolo.GetFont()
#        font.SetWeight(wx.FONTWEIGHT_BOLD)
#        titolo.SetFont(font)
#        boxsizer.Add(titolo,0,wx.ALL,border=mDefaultBorder)
#        boxsizer.AddSpacer(5)
#        
#        choices=['Per eccesso  ','Per difetto  ','Non arrotondare']
#        self.round_values=[u'up',u'down',u'no']
#        self.rb = wx.RadioBox(
#                self, -1, "Arrotonda", wx.DefaultPosition, wx.DefaultSize,
#                choices, 3, wx.RA_SPECIFY_COLS
#                )
#        boxsizer.Add(self.rb,0,border=mDefaultBorder)
#        
#        mainsizer.Add(boxsizer,0,flag=wx.ALL|wx.EXPAND ,border=10)#riga zero colonna 1
#        
#        mainsizer.AddSpacer(100)
#        
#        boxsizer=wx.BoxSizer(wx.VERTICAL)
#        boxsizer.AddSpacer(10)
#        titolo=wx.StaticText(self,label="Calcolatrice")
#        font=titolo.GetFont()
#        font.SetWeight(wx.FONTWEIGHT_BOLD)
#        titolo.SetFont(font)
#        boxsizer.Add(titolo,0,wx.ALL,border=mDefaultBorder)
#        boxsizer.AddSpacer(5)
#                
#        self.calc = wx.CheckBox(parent=self,id=wx.NewId(),label="Abilita Calcolatrice",style=wx.ALIGN_RIGHT)
#        boxsizer.Add(self.calc,0,wx.TOP|wx.RIGHT,border=mDefaultBorder)
#        
#        self.calc_cmd=co.LabeledCtrl(self,size=(100,-1),label='Comando di sistema',label_size=(-1,-1))
#        boxsizer.Add(self.calc_cmd,0,wx.ALL,border=mDefaultBorder)
#        
#        mainsizer.Add(boxsizer,0,flag=wx.ALL|wx.EXPAND ,border=10)#riga zero colonna 1        
#        
#        mainsizer.Layout()
#        self.SetAutoLayout(True)
#    
#    def _request_listini(self,*args,**kwargs):
#        observer=wx.GetApp().get_observer()
#        observer.set_listini_context()
#        return observer.get_objects(*args,**kwargs)
#    
#    def _request_codici_iva(self):
#        observer=wx.GetApp().get_observer()
#        observer.set_codici_iva_context()
#        objects=observer.get_objects()
#        return objects
#    
#    def __bind(self):
#        self.Bind(wx.EVT_CHECKBOX, self.on_check_calc,id=self.calc.Id)
#    
#    def on_check_calc(self,evt):
#        self.calc_cmd.enable(self.calc.IsChecked())
#    
#    def update_fields(self,opzioni):
#        print 'Generale.update_fields'
#        self.gestione_magazzino.SetValue(_bool(opzioni.GESTIONE_MAGAZZINO))
#        self.vendite_banco.SetValue(_bool(opzioni.VENDITE_AL_BANCO))
#        self.calc.SetValue(_bool(opzioni.CALC))
#        self.calc_cmd.set_value(opzioni.CALC_CMD)
#        self.on_check_calc(None)
#        self.vis_prezzo_forn.SetValue(_bool(opzioni.MOSTRA_PREZZO_FORN))
#        self.prezzi_ivati.SetValue(_bool(opzioni.PREZZI_IVATI))
#        self.default_listforn_ctrl.SetStringSelection(opzioni.LISTINO_DEFAULT_ACQUISTO)
#        self.default_listcli_ctrl.SetStringSelection(opzioni.LISTINO_DEFAULT_VENDITA)
#        self.default_iva_ctrl.SetStringSelection(opzioni.IVA_DEFAULT)
#        self.rb.SetSelection(self.round_values.index((opzioni.ROUND or 'up')))
#    
#    def reset_fields(self):#non serve
#        print 'Generale.reset_fields'
#        self.gestione_magazzino.SetValue(False)
#        self.vendite_banco.SetValue(False)
#    
#    def update_object(self,opzioni):
#        print 'Generale.update_object'
#        opzioni.GESTIONE_MAGAZZINO=to_string(self.gestione_magazzino.GetValue())
#        opzioni.VENDITE_AL_BANCO=to_string(self.vendite_banco.GetValue())
#        opzioni.CALC=to_string(self.calc.GetValue())
#        opzioni.CALC_CMD=self.calc_cmd.get_value()
#        opzioni.MOSTRA_PREZZO_FORN=to_string(self.vis_prezzo_forn.GetValue())
#        opzioni.PREZZI_IVATI=to_string(self.prezzi_ivati.GetValue())
#        opzioni.LISTINO_DEFAULT_ACQUISTO=self.default_listforn_ctrl.GetStringSelection()
#        opzioni.LISTINO_DEFAULT_VENDITA=self.default_listcli_ctrl.GetStringSelection()
#        opzioni.IVA_DEFAULT=self.default_iva_ctrl.GetStringSelection()
#        opzioni.ROUND=self.round_values[self.rb.GetSelection()]


##===============================================================================
## DocumentiPanel
##===============================================================================
#class DocumentiPanel(wx.Panel):
#    def __init__(self,*args,**kwargs):
#        wx.Panel.__init__(self,*args,**kwargs)
#        self.__do_layout()
#        self._bind()
#           
#    def __do_layout(self):
#        mainsizer=wx.BoxSizer(wx.VERTICAL)
#        fieldsizer = wx.GridBagSizer(0,0)
#        
#        boxsizer=wx.BoxSizer(wx.VERTICAL)        
#        boxsizer.AddSpacer(10)
#        titolo=wx.StaticText(self,label="Vendite al Banco")
#        font=titolo.GetFont()
#        font.SetWeight(wx.FONTWEIGHT_BOLD)
#        titolo.SetFont(font)
#        boxsizer.Add(titolo,0,wx.ALL,border=mDefaultBorder)
#        boxsizer.AddSpacer(5)
#        
#        listini=self._request_listini()
#        choices=[]
#        for listino_ in listini:
#            choices.append(listino_.codice)        
#        
#        self.listino_vendita_banco = co.Choice(parent=self,size=(197, 25),choices=choices)
#        boxsizer.Add(co.CompositeCtrl(self.listino_vendita_banco,label='Listino di default'),0,wx.ALL,border=mDefaultBorder)
#        
##        self.iva_default = co.ComboBox(id=wx.NewId(),parent=self,size=wx.Size(197, 25),style=wx.CB_READONLY,item_info='codice')
##        boxsizer.Add(co.CompositeCtrl(self.iva_default,label='Iva di default'),0,wx.ALL,border=mDefaultBorder)
#        #boxsizer.Add(self.gestione_magazzino,0,wx.TOP|wx.RIGHT,border=mDefaultBorder)
#        
#        boxsizer.AddSpacer(20)
#        
#        titolo=wx.StaticText(self,label="Fatture")
#        font=titolo.GetFont()
#        font.SetWeight(wx.FONTWEIGHT_BOLD)
#        titolo.SetFont(font)
#        boxsizer.Add(titolo,0,wx.ALL,border=mDefaultBorder)
#        boxsizer.AddSpacer(5)
#        
#        self.numerazione_auto = wx.CheckBox(parent=self,label="Numerazione automatica",style=wx.ALIGN_RIGHT)
#        boxsizer.Add(self.numerazione_auto,0,wx.TOP|wx.RIGHT,border=mDefaultBorder)
#        
#        self.next_num_fattura=co.LabeledCtrl(self,size=(60,-1),label='Prossimo numero fattura',label_size=(-1,-1))
#        boxsizer.Add(self.next_num_fattura,0,wx.ALL,border=mDefaultBorder)
#        
#        self.elimina_fatture = wx.CheckBox(parent=self,label="Abilita eliminazione fatture",style=wx.ALIGN_RIGHT)
#        boxsizer.Add(self.elimina_fatture,0,wx.TOP|wx.RIGHT,border=mDefaultBorder)
#                
#        fieldsizer.Add(boxsizer,(0,0),flag=wx.ALL|wx.EXPAND ,border=0)#riga zero colonna 1                
#        fieldsizer.AddGrowableRow(0)
#        fieldsizer.AddGrowableCol(1)
#        
#        mainsizer.Add(fieldsizer,1,flag=wx.ALL|wx.EXPAND ,border=10)#riga zero colonna 1        
#        
#        mainsizer.Layout()
#        self.SetAutoLayout(True)
#    
#    def _bind(self):
#        self.Bind(wx.EVT_CHECKBOX, self.aggiorna_num_auto,id=self.numerazione_auto.Id)
#    
#    def _request_listini(self):
#        '''Fa una richiesta al database.''' 
#        observer=wx.GetApp().get_observer()
#        observer.set_listini_context()                
#        objects=observer.get_objects()
#        return objects
#    
#    def _request_next_fatt(self):
#        observer=wx.GetApp().get_observer()
#        observer.set_fatture_context()
#        num=observer.action_request('get_next_num')
#        return num
#    
#    def _update_next_fatt(self):
#        observer=wx.GetApp().get_observer()
#        observer.set_fatture_context()
#        observer.action_request('set_next_num',self.next_num_fattura.get_value())
#    
#    def aggiorna_num_auto(self,evt=None):
#        if self.numerazione_auto.GetValue():
#            self.next_num_fattura.set_value(self._request_next_fatt())
#            self.next_num_fattura.enable(True)
#        else:
#            self.next_num_fattura.clear()
#            self.next_num_fattura.enable(False)
#    
#    def update_fields(self,opzioni):
#        print 'Generale.update_fields'
#        self.listino_vendita_banco.SetStringSelection(opzioni.LISTINO_VENDITA_BANCO)
#        self.numerazione_auto.SetValue(_bool(opzioni.FATT_NUM_AUTO))
#        self.elimina_fatture.SetValue(_bool(opzioni.ELIMINA_FATTURE))
#        self.aggiorna_num_auto()        
#    
#    def reset_fields(self):
#        print 'Generale.reset_fields'
#        #self.gestione_magazzino.SetValue(False)
#    
#    def update_object(self,opzioni):
#        print 'Generale.update_object'
#        opzioni.LISTINO_VENDITA_BANCO=self.listino_vendita_banco.GetStringSelection()
#        opzioni.FATT_NUM_AUTO=to_string(self.numerazione_auto.GetValue())
#        opzioni.ELIMINA_FATTURE=to_string(self.elimina_fatture.GetValue())
#        if self.numerazione_auto.GetValue():
#            self._update_next_fatt()
        
        
        
class DatabasePanel(wx.Panel):
    def __init__(self,*args,**kwargs):
        wx.Panel.__init__(self,*args,**kwargs)
        
        self.backend=co.LabelChoice(self,label='Backend',choices=['mysql',])
        self.db_name = co.LabelTextCtrl(self,label='Nome Database')
        self.user = co.LabelTextCtrl(self,label='User')
        self.passwd = co.LabelTextCtrl(self,label='Password',style=wx.PASSWORD)
        self.port = co.LabelTextCtrl(self,label='Porta')
        self.host = co.LabelTextCtrl(self,label='Host')
        self.btn_sblocca = wx.Button(self,label='Sblocca')
        
        self.__do_layout()        
        self._bind()
           
    def __do_layout(self):
        mainsizer=wx.BoxSizer(wx.VERTICAL)
        fieldsizer = wx.GridBagSizer(0,0)
        
        boxsizer=wx.BoxSizer(wx.VERTICAL)        
        boxsizer.AddSpacer(10)
        titolo=wx.StaticText(self,label="Dati Accesso")
        font=titolo.GetFont()
        font.SetWeight(wx.FONTWEIGHT_BOLD)
        titolo.SetFont(font)
        boxsizer.Add(titolo,0,wx.ALL,border=mDefaultBorder)
        boxsizer.AddSpacer(5)        
        
#        self.backend_ctrl = co.Choice(parent=self,size=(197, 25),choices=['mysql',])
#        self.backend=co.LabelCtrl(self,control=self.backend_ctrl,label='Backend')
        boxsizer.Add(self.backend,0,wx.ALL,border=mDefaultBorder)
        
#        self.db_name = co.LabeledCtrl(parent=self,size=(197, 25),label='Nome Database')
        boxsizer.Add(self.db_name,0,wx.ALL,border=mDefaultBorder)
        
#        self.user = co.LabeledCtrl(parent=self,size=(197, 25),label='User')
        boxsizer.Add(self.user,0,wx.ALL,border=mDefaultBorder)
        
#        self.passwd = co.LabeledCtrl(parent=self,size=(197, 25),label='Password',style=wx.PASSWORD)
        boxsizer.Add(self.passwd,0,wx.ALL,border=mDefaultBorder)
        
#        self.port = co.LabeledCtrl(parent=self,size=(197, 25),label='Porta')
        boxsizer.Add(self.port,0,wx.ALL,border=mDefaultBorder)
        
#        self.host = co.LabeledCtrl(parent=self,size=(197, 25),label='Host')
        boxsizer.Add(self.host,0,wx.ALL,border=mDefaultBorder)
        
        
        boxsizer.Add(self.btn_sblocca,0,wx.ALL,border=mDefaultBorder)
                                
        fieldsizer.Add(boxsizer,(0,0),flag=wx.ALL|wx.EXPAND ,border=0)#riga zero colonna 1                
        fieldsizer.AddGrowableRow(0)
        fieldsizer.AddGrowableCol(1)
        
        mainsizer.Add(fieldsizer,1,flag=wx.ALL|wx.EXPAND ,border=10)#riga zero colonna 1        
        self.sblocca_campi(False)
        mainsizer.Layout()
        self.SetAutoLayout(True)
    
    def _bind(self):
        self.Bind(wx.EVT_BUTTON, self.on_sblocca,id=self.btn_sblocca.GetId())
    
    def on_sblocca(self,evt):
        dlg=dialogs.PasswordDialog(self)
        dlg.CenterOnScreen()
        val=dlg.ShowModal()
        if val == wx.ID_OK:
            if self.passwd.get_value()==dlg.passwd.GetValue():
                self.sblocca_campi()
            else:
                wx.GetApp().show_error('Password errata!')
        dlg.Destroy()
    
    def sblocca_campi(self,sblocca=True):
        self.backend.enable(sblocca)
        self.db_name.enable(sblocca)
        self.user.enable(sblocca)
        self.passwd.enable(sblocca)
        self.port.enable(sblocca)
        self.host.enable(sblocca)
        self.btn_sblocca.Enable(not sblocca)
    
    def update_fields(self,info):
        print 'Generale.update_fields'
        self.backend.set_string_selection(info.backend)
        self.db_name.set_value(info.dbname)
        self.user.set_value(info.user)
        self.passwd.set_value(info.passwd)
        self.port.set_value(info.port)
        self.host.set_value(info.host)        
    
    def reset_fields(self):
        print 'Generale.reset_fields'
        #self.gestione_magazzino.SetValue(False)
    
    def update_object(self,info):
        print 'Generale.update_object'
        info.backend=self.backend.get_string_selection()
        info.dbname=self.db_name.get_value()
        info.user=self.user.get_value()
        info.passwd=self.passwd.get_value()
        info.port=self.port.get_value()
        info.host=self.host.get_value()


#class AziendaPanel(wx.Panel):
#    def __init__(self,*args,**kwargs):
#        wx.Panel.__init__(self,*args,**kwargs)
#        self.__do_layout()        
#           
#    def __do_layout(self):
#        mainsizer=wx.BoxSizer(wx.VERTICAL)
#        fieldsizer = wx.GridBagSizer(0,0)
#        
#        orsizer=wx.BoxSizer()
#        
#        boxsizer=wx.BoxSizer(wx.VERTICAL)        
#        boxsizer.AddSpacer(10)
#        titolo=wx.StaticText(self,label="Dati Azienda")
#        font=titolo.GetFont()
#        font.SetWeight(wx.FONTWEIGHT_BOLD)
#        titolo.SetFont(font)
#        boxsizer.Add(titolo,0,wx.ALL,border=mDefaultBorder)
#        boxsizer.AddSpacer(5)
#        
#        self.ID=None
#        
#        self.ragione_sociale = co.LabeledCtrl(parent=self,size=(355, 25),label='Ragione Sociale')
#        boxsizer.Add(self.ragione_sociale,0,wx.ALL,border=mDefaultBorder)
#        
#        self.sottotitolo = co.LabeledCtrl(parent=self,size=(355, 25),label='Sottotitolo')
#        boxsizer.Add(self.sottotitolo,0,wx.ALL,border=mDefaultBorder)
#        
#        self.indirizzo = co.LabeledCtrl(parent=self,size=(355, 25),label='Indirizzo')
#        boxsizer.Add(self.indirizzo,0,wx.ALL,border=mDefaultBorder)
#        
#        self.cap = co.LabeledCtrl(parent=self,size=(60, 25),label='CAP')
#        orsizer.Add(self.cap,0,wx.ALL,border=mDefaultBorder)
#        
#        orsizer.AddSpacer(10)
#        
#        self.citta = co.LabeledCtrl(parent=self,size=(150,25),label='Città',label_size=(-1,-1))
#        orsizer.Add(self.citta,0,wx.ALL,border=mDefaultBorder)
#        
#        orsizer.AddSpacer(10)
#        
#        self.provincia = co.LabeledCtrl(parent=self,size=(40,25),label='Prov.',label_size=(-1,-1))
#        orsizer.Add(self.provincia,0,wx.ALL,border=mDefaultBorder)
#        
#        boxsizer.Add(orsizer)
#        
#        orsizer=wx.BoxSizer()
#        self.codice_fiscale = co.LabeledCtrl(parent=self,size=(154, 25),label='Cod.Fiscale')
#        orsizer.Add(self.codice_fiscale,0,wx.ALL,border=mDefaultBorder)
#        
#        orsizer.AddSpacer(10)
#        
#        self.piva = co.LabeledCtrl(parent=self,size=(150, 25),label='P.Iva',label_size=(-1,-1))
#        orsizer.Add(self.piva,0,wx.ALL,border=mDefaultBorder)
#        
#        boxsizer.Add(orsizer)
#        
#        orsizer=wx.BoxSizer()
#        
#        self.telefono = co.LabeledCtrl(parent=self,size=(156, 25),label='Tel.')
#        orsizer.Add(self.telefono,0,wx.ALL,border=mDefaultBorder)
#        
#        orsizer.AddSpacer(10)
#        
#        self.fax = co.LabeledCtrl(parent=self,size=(155, 25),label='Fax',label_size=(-1,-1))
#        orsizer.Add(self.fax,0,wx.ALL,border=mDefaultBorder)
#        
#        boxsizer.Add(orsizer)
#        
#        self.email = co.LabeledCtrl(parent=self,size=(355, 25),label='E-Mail')
#        boxsizer.Add(self.email,0,wx.ALL,border=mDefaultBorder)
#        
#        self.home_page = co.LabeledCtrl(parent=self,size=(355, 25),label='Home Page')
#        boxsizer.Add(self.home_page,0,wx.ALL,border=mDefaultBorder)
#        
#        self.note = co.LabeledCtrl(parent=self,style=wx.TE_MULTILINE|wx.TE_PROCESS_ENTER,label='Note',size=(-1,-1))
#        boxsizer.Add(self.note,0,wx.ALL,border=mDefaultBorder)
#                                
#        fieldsizer.Add(boxsizer,(0,0),flag=wx.ALL|wx.EXPAND ,border=0)#riga zero colonna 1                
#        fieldsizer.AddGrowableRow(0)
#        fieldsizer.AddGrowableCol(1)
#        
#        mainsizer.Add(fieldsizer,1,flag=wx.ALL|wx.EXPAND ,border=10)#riga zero colonna 1        
#        
#        mainsizer.Layout()
#        self.SetAutoLayout(True)
#    
#    def update_fields(self,azienda):
#        print 'Azienda.update_fields'
#        self.ID=azienda.get_ID()
#        self.ragione_sociale.set_value(azienda.ragione_sociale)
#        self.sottotitolo.set_value(azienda.sottotitolo)
#        self.indirizzo.set_value(azienda.get_via())
#        self.cap.set_value(azienda.get_cap())
#        self.citta.set_value(azienda.get_citta())
#        self.provincia.set_value(azienda.get_provincia())
#        self.codice_fiscale.set_value(azienda.codfisc)
#        self.piva.set_value(azienda.piva)
#        self.telefono.set_value(azienda.telefono)
#        self.fax.set_value(azienda.fax)
#        #self.cellulare.SetValue(azienda.cellulare)
#        self.email.set_value(azienda.email)
#        self.home_page.set_value(azienda.sitoweb)
#        self.note.set_value(azienda.note)
#    
#    def reset_fields(self):
#        print 'Azienda.reset_fields'
#        #self.gestione_magazzino.SetValue(False)
#    
#    def update_object(self,azienda):
#        print 'Azienda.update_object'
#        azienda.set_ID(self.ID)
#        azienda.ragione_sociale=self.ragione_sociale.get_value()
#        azienda.sottotitolo=self.sottotitolo.get_value()
#        azienda.set_via(self.indirizzo.get_value())
#        azienda.set_cap(self.cap.get_value())
#        azienda.set_citta(self.citta.get_value().decode('utf-8'))
#        azienda.set_provincia(self.provincia.get_value())
#        azienda.codfisc=self.codice_fiscale.get_value()
#        azienda.piva=self.piva.get_value()
#        azienda.telefono=self.telefono.get_value()
#        azienda.fax=self.fax.get_value()
#        #self.cellulare.SetValue(azienda.cellulare)
#        azienda.email=self.email.get_value()
#        azienda.sitoweb=self.home_page.get_value()
#        azienda.note=self.note.get_value()

    
#===============================================================================
# OpzioniPage
#===============================================================================
class OpzioniPage(wx.Panel,pages.AbstractPage):
    TITLE='Preferenze'
    def __init__(self,parent,context,opzioni,panels,*args,**kwargs):
        super(OpzioniPage,self).__init__(parent)                       
        self.panel_list=[]
        self.modules=kwargs['modules']
        self.notebook=co.KoroNotebook(self)
        #self.database=DatabasePanel(self)
        #self.modules_panel=ModuliPanel(self,self.modules)
        self._init_notebook(panels)
        self.__do_layout()
        self.opzioni=opzioni
        #self.connection_info=self._request_connection_info()
        #self.dati_azienda=self._request_dati_azienda()
        self.update_fields()
        self.SetAutoLayout(True)
        self.Reparent(wx.GetApp().get_main_frame())
    
    def show_table(self):
        pass
    
    def _init_notebook(self,panels):
        #self.notebook.AddPage(self.generale, "Generale", True)
        #self.notebook.AddPage(self.azienda, "Azienda", False)
        #self.notebook.AddPage(wx.Panel(self), "Prodotti", False)
        #self.notebook.AddPage(self.documenti, "Documenti", False)
        #self.notebook.AddPage(wx.Panel(self), "Documenti", False)
        
        #self.notebook.AddPage(self.modules_panel, self.modules_panel.NAME)        
        #self.notebook.AddPage(self.database, "Database")
        for item in panels:
            panel=item(self)
            self.panel_list.append(panel)
            self.notebook.AddPage(panel,panel.NAME)        
    
    def __do_layout(self):
        #mainsizer=wx.BoxSizer(wx.VERTICAL)
        #fieldsizer = wx.GridBagSizer(0,0)
        #vsizer=wx.BoxSizer(wx.VERTICAL)
        #lborder = 10
        #tborder = 6
        boxsizer=wx.BoxSizer(wx.VERTICAL)
        
        testo="Da questa pagina è possibile modificare le opzioni del programma."
        boxsizer.Add(wx.StaticText(self,label=testo),0,wx.ALL|wx.EXPAND,border=5)
        boxsizer.AddSpacer(10)
    
        
                       
        #vsizer.Add(boxsizer,0)
        #fnbstyle=fnb.FNB_NODRAG|fnb.FNB_NO_X_BUTTON|fnb.FNB_NO_NAV_BUTTONS|fnb.FNB_FANCY_TABS
        #self.notebook=fnb.FlatNotebook(self,wx.NewId(),style=fnbstyle)
        #self.generale=GeneralePanel(self)
        #self.documenti=DocumentiPanel(self)
        
            
        boxsizer.Add(self.notebook,1,flag=wx.ALL|wx.EXPAND,border=4)
        
        boxsizer.Layout()
        self.SetSizer(boxsizer)
        #fieldsizer.Add(vsizer,(0,0),flag=wx.ALL|wx.EXPAND ,border=0)#riga zero colonna 1                
        #fieldsizer.AddGrowableRow(0)
        #fieldsizer.AddGrowableCol(1)
        
        #mainsizer.Add(fieldsizer,1,flag=wx.ALL|wx.EXPAND ,border=10)#riga zero colonna 1
        
        #mainsizer.Layout()

    def update_fields(self):
        print 'OpzioniPage.update_fields'
#        self.generale.update_fields(self.opzioni)
#        self.documenti.update_fields(self.opzioni)
        #self.database.update_fields(self.connection_info)
        #self.azienda.update_fields(self.dati_azienda)
        for panel in self.panel_list:
            panel.update_fields(self.opzioni)
    
    def reset_fields(self):#non serve
        print 'OpzioniPage.reset_fields'        
#        self.generale.reset_fields()
#        self.documenti.reset_fields()
        #self.database.reset_fields()
        for panel in self.panel_list:
            panel.reset_fields(self.opzioni)
    
    def update_object(self):
        print 'OpzioniPage.update_object sistemare'        
#        self.generale.update_object(self.opzioni)
#        self.documenti.update_object(self.opzioni)
        #self.database.update_object(self.connection_info)
        #self.azienda.update_object(self.dati_azienda)
        for panel in self.panel_list:
            panel.update_object(self.opzioni)
        
    def _request_opzioni(self):
        observer=wx.GetApp().get_observer()
        observer.set_opzioni_context()
        return observer.get_objects()
    
#    def _request_connection_info(self):
#        observer=wx.GetApp().get_observer()
#        observer.set_opzioni_context()
#        return observer.get_info_connessione()
    
#    def _request_dati_azienda(self):
#        observer=wx.GetApp().get_observer()
#        observer.set_opzioni_context()
#        return observer.get_dati_azienda()
    
    def before_close(self):
        print 'prima di chiudere salvo le opzioni'
        self.update_object()
        observer=wx.GetApp().get_observer()
        observer.set_opzioni_context()        
        observer.save_object(self.opzioni)
        #observer.save_info_connessione(self.connection_info)
        #observer.save_dati_azienda(self.dati_azienda)
        for panel in self.panel_list:
            panel.before_close(observer)        
        #modules=self.modules_panel.get_selected_modules()
        #observer.save_enabled_modules(modules)
    
    def show(self):
        pass


#===============================================================================
# OpzioniAdminPage
#===============================================================================
class OpzioniAdminPage(wx.Panel,pages.AbstractPage):
    TITLE='Preferenze'
    def __init__(self,parent,context,opzioni,panels,*args,**kwargs):
        super(OpzioniAdminPage,self).__init__(parent)                       
        self.panel_list=[]
        self.modules=kwargs['modules']
        self.notebook=co.KoroNotebook(self)
        self.database=DatabasePanel(self)
        self.modules_panel=ModuliPanel(self,self.modules)
        self._init_notebook(panels)
        self.__do_layout()
        self.opzioni=opzioni
        self.connection_info=self._request_connection_info()
        #self.dati_azienda=self._request_dati_azienda()
        self.update_fields()
        self.SetAutoLayout(True)
        self.Reparent(wx.GetApp().get_main_frame())
    
    def show_table(self):
        pass
    
    def _init_notebook(self,panels):
        #self.notebook.AddPage(self.generale, "Generale", True)
        #self.notebook.AddPage(self.azienda, "Azienda", False)
        #self.notebook.AddPage(wx.Panel(self), "Prodotti", False)
        #self.notebook.AddPage(self.documenti, "Documenti", False)
        #self.notebook.AddPage(wx.Panel(self), "Documenti", False)
        self.notebook.AddPage(self.modules_panel, self.modules_panel.NAME)        
        self.notebook.AddPage(self.database, "Database")
        for item in panels:
            panel=item(self)
            self.panel_list.append(panel)
            self.notebook.AddPage(panel,panel.NAME)        
    
    def __do_layout(self):
        #mainsizer=wx.BoxSizer(wx.VERTICAL)
        #fieldsizer = wx.GridBagSizer(0,0)
        #vsizer=wx.BoxSizer(wx.VERTICAL)
        #lborder = 10
        #tborder = 6
        boxsizer=wx.BoxSizer(wx.VERTICAL)
        
        testo="Da questa pagina è possibile modificare le opzioni del programma."
        boxsizer.Add(wx.StaticText(self,label=testo),0,wx.ALL|wx.EXPAND,border=5)
        boxsizer.AddSpacer(10)
    
        
                       
        #vsizer.Add(boxsizer,0)
        #fnbstyle=fnb.FNB_NODRAG|fnb.FNB_NO_X_BUTTON|fnb.FNB_NO_NAV_BUTTONS|fnb.FNB_FANCY_TABS
        #self.notebook=fnb.FlatNotebook(self,wx.NewId(),style=fnbstyle)
        #self.generale=GeneralePanel(self)
        #self.documenti=DocumentiPanel(self)
        
            
        boxsizer.Add(self.notebook,1,flag=wx.ALL|wx.EXPAND,border=4)
        
        boxsizer.Layout()
        self.SetSizer(boxsizer)
        #fieldsizer.Add(vsizer,(0,0),flag=wx.ALL|wx.EXPAND ,border=0)#riga zero colonna 1                
        #fieldsizer.AddGrowableRow(0)
        #fieldsizer.AddGrowableCol(1)
        
        #mainsizer.Add(fieldsizer,1,flag=wx.ALL|wx.EXPAND ,border=10)#riga zero colonna 1
        
        #mainsizer.Layout()

    def update_fields(self):
        print 'OpzioniPage.update_fields'
#        self.generale.update_fields(self.opzioni)
#        self.documenti.update_fields(self.opzioni)
        self.database.update_fields(self.connection_info)
        #self.azienda.update_fields(self.dati_azienda)
        for panel in self.panel_list:
            panel.update_fields(self.opzioni)
    
    def reset_fields(self):#non serve
        print 'OpzioniPage.reset_fields'        
#        self.generale.reset_fields()
#        self.documenti.reset_fields()
        self.database.reset_fields()
        for panel in self.panel_list:
            panel.reset_fields(self.opzioni)
    
    def update_object(self):
        print 'OpzioniPage.update_object sistemare'        
#        self.generale.update_object(self.opzioni)
#        self.documenti.update_object(self.opzioni)
        self.database.update_object(self.connection_info)
        #self.azienda.update_object(self.dati_azienda)
        for panel in self.panel_list:
            panel.update_object(self.opzioni)
        
    def _request_opzioni(self):
        observer=wx.GetApp().get_observer()
        observer.set_opzioni_context()
        return observer.get_objects()
    
    def _request_connection_info(self):
        observer=wx.GetApp().get_observer()
        observer.set_opzioni_context()
        return observer.get_info_connessione()
    
#    def _request_dati_azienda(self):
#        observer=wx.GetApp().get_observer()
#        observer.set_opzioni_context()
#        return observer.get_dati_azienda()
    
    def before_close(self):
        print 'prima di chiudere salvo le opzioni'
        self.update_object()
        observer=wx.GetApp().get_observer()
        observer.set_opzioni_context()        
        observer.save_object(self.opzioni)
        observer.save_info_connessione(self.connection_info)
        #observer.save_dati_azienda(self.dati_azienda)
        for panel in self.panel_list:
            panel.before_close(observer)        
        modules=self.modules_panel.get_selected_modules()
        observer.save_enabled_modules(modules)
    
    def show(self):
        pass
    
#    def on_page_focus(self):
#        #self.documenti.aggiorna_num_auto()
#        for panel in self.panel_list:
#            panel.on_page_focus()
